package com.platform.usercenter.mapper;


import com.platform.usercenter.domain.CalLeaderPlan;
import com.platform.usercenter.domain.dto.CalLeaderPlanDTO;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 领导排班计划主Mapper接口
 * 
 * @author platform
 * @date 2023-10-04
 */
public interface CalLeaderPlanMapper 
{
    /**
     * 查询领导排班计划主
     * 
     * @param id 领导排班计划主主键
     * @return 领导排班计划主
     */
    public CalLeaderPlan selectCalLeaderPlanById(Long id);

    /**
     * 查询领导排班计划主
     *
     * @param userId 领导排班计划主主键
     * @return 领导排班计划主
     */
    public List<CalLeaderPlan> selectCalLeaderPlanByDate(@Param("date") Date date,@Param("userId") Long userId);

    /**
     * 查询领导排班计划主列表
     * 
     * @param calLeaderPlan 领导排班计划主
     * @return 领导排班计划主集合
     */
    public List<CalLeaderPlan> selectCalLeaderPlanList(CalLeaderPlanDTO calLeaderPlan);

    /**
     * 新增领导排班计划主
     * 
     * @param calLeaderPlan 领导排班计划主
     * @return 结果
     */
    public int insertCalLeaderPlan(CalLeaderPlan calLeaderPlan);

    /**
     * 修改领导排班计划主
     * 
     * @param calLeaderPlan 领导排班计划主
     * @return 结果
     */
    public int updateCalLeaderPlan(CalLeaderPlan calLeaderPlan);

    /**
     * 删除领导排班计划主
     * 
     * @param id 领导排班计划主主键
     * @return 结果
     */
    public int deleteCalLeaderPlanById(Long id);

    /**
     * 批量删除领导排班计划主
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteCalLeaderPlanByIds(@Param("list") List<Integer> ids,@Param("deleteBy")Long deleteBy);

    /**
     * 批量插入生成的计划
     * @param calLeaderPlans
     * @return
     */
    int insertCalLeaderPlanBatch(@Param("list") List<CalLeaderPlan> calLeaderPlans);

    /**
     * 排班计划单条新增
     * @param calLeaderPlan
     * @return
     */
    int insertCalLeaderPlanSingle(@Param("model") CalLeaderPlanDTO calLeaderPlan);

    /**
     * 查询是否有已经存在的计划
     * @param dateList
     * @param leaderId
     * @return
     */
    Integer queryExistPlanByDateAndUserId(@Param("list")List<Date> dateList,@Param("leaderId")Long leaderId);

    Integer queryExistPlanByDate(@Param("list")List<Date> dateList,@Param("leaderId")Long leaderId,@Param("leaderDeptName")String leaderDeptName);

}
